/**
 * FUNZIONI UTILI
 */
function html_entity_decode(s){
    var t = document.createElement("textarea");
    t.innerHTML = s;
    var v = t.value;
    t = null;
    return v;
}

function addslashes(str){
    if (str) {
        str = str.replace(/\\/g, '\\\\');
        str = str.replace(/\'/g, '\\\'');
        str = str.replace(/\"/g, '\\"');
        str = str.replace(/\0/g, '\\0');
        return str;
    }
}

function stripslashes(str){
    if (str) {
        str = str.replace(/\\'/g, '\'');
        str = str.replace(/\\"/g, '"');
        str = str.replace(/\\0/g, '\0');
        str = str.replace(/\\\\/g, '\\');
    }
    return str;
}

function htmlentities(string, quote_style){
    // http://kevin.vanzonneveld.net
    // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // + improved by: nobbler
    // + tweaked by: Jack
    // + bugfixed by: Onno Marsman
    // + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // - depends on: get_html_translation_table
    // * example 1: htmlentities('Kevin & van Zonneveld');
    // * returns 1: 'Kevin &amp; van Zonneveld'
    // * example 2: htmlentities("foo'bar","ENT_QUOTES");
    // * returns 2: 'foo&#039;bar'
    
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
    
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
    
    return tmp_str;
}

function get_html_translation_table(table, quote_style){
    // http://kevin.vanzonneveld.net
    // + original by: Philip Peterson
    // + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // + bugfixed by: noname
    // + bugfixed by: Alex
    // + bugfixed by: Marco
    // + bugfixed by: madipta
    // % note: It has been decided that we're not going to add global
    // % note: dependencies to php.js. Meaning the constants are not
    // % note: real constants, but strings instead. integers are also supported
    // if someone
    // % note: chooses to create the constants themselves.
    // % note: Table from http://www.the-art-of-web.com/html/character-codes/
    // * example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // * returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    
    var entities = {}, histogram = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    useTable = (table ? table.toUpperCase() : 'HTML_SPECIALCHARS');
    useQuoteStyle = (quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT');
    
    // Translate arguments
    constMappingTable[0] = 'HTML_SPECIALCHARS';
    constMappingTable[1] = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
    
    // Map numbers to strings for compatibilty with PHP constants
    if (!isNaN(useTable)) {
        useTable = constMappingTable[useTable];
    }
    if (!isNaN(useQuoteStyle)) {
        useQuoteStyle = constMappingQuoteStyle[useQuoteStyle];
    }
    
    if (useTable == 'HTML_SPECIALCHARS') {
        // ascii decimals for better compatibility
        entities['38'] = '&amp;';
        if (useQuoteStyle != 'ENT_NOQUOTES') {
            entities['34'] = '&quot;';
        }
        if (useQuoteStyle == 'ENT_QUOTES') {
            entities['39'] = '&#039;';
        }
        entities['60'] = '&lt;';
        entities['62'] = '&gt;';
    }
    else 
        if (useTable == 'HTML_ENTITIES') {
            // ascii decimals for better compatibility
            entities['38'] = '&amp;';
            if (useQuoteStyle != 'ENT_NOQUOTES') {
                entities['34'] = '&quot;';
            }
            if (useQuoteStyle == 'ENT_QUOTES') {
                entities['39'] = '&#039;';
            }
            entities['60'] = '&lt;';
            entities['62'] = '&gt;';
            entities['160'] = '&nbsp;';
            entities['161'] = '&iexcl;';
            entities['162'] = '&cent;';
            entities['163'] = '&pound;';
            entities['164'] = '&curren;';
            entities['165'] = '&yen;';
            entities['166'] = '&brvbar;';
            entities['167'] = '&sect;';
            entities['168'] = '&uml;';
            entities['169'] = '&copy;';
            entities['170'] = '&ordf;';
            entities['171'] = '&laquo;';
            entities['172'] = '&not;';
            entities['173'] = '&shy;';
            entities['174'] = '&reg;';
            entities['175'] = '&macr;';
            entities['176'] = '&deg;';
            entities['177'] = '&plusmn;';
            entities['178'] = '&sup2;';
            entities['179'] = '&sup3;';
            entities['180'] = '&acute;';
            entities['181'] = '&micro;';
            entities['182'] = '&para;';
            entities['183'] = '&middot;';
            entities['184'] = '&cedil;';
            entities['185'] = '&sup1;';
            entities['186'] = '&ordm;';
            entities['187'] = '&raquo;';
            entities['188'] = '&frac14;';
            entities['189'] = '&frac12;';
            entities['190'] = '&frac34;';
            entities['191'] = '&iquest;';
            entities['192'] = '&Agrave;';
            entities['193'] = '&Aacute;';
            entities['194'] = '&Acirc;';
            entities['195'] = '&Atilde;';
            entities['196'] = '&Auml;';
            entities['197'] = '&Aring;';
            entities['198'] = '&AElig;';
            entities['199'] = '&Ccedil;';
            entities['200'] = '&Egrave;';
            entities['201'] = '&Eacute;';
            entities['202'] = '&Ecirc;';
            entities['203'] = '&Euml;';
            entities['204'] = '&Igrave;';
            entities['205'] = '&Iacute;';
            entities['206'] = '&Icirc;';
            entities['207'] = '&Iuml;';
            entities['208'] = '&ETH;';
            entities['209'] = '&Ntilde;';
            entities['210'] = '&Ograve;';
            entities['211'] = '&Oacute;';
            entities['212'] = '&Ocirc;';
            entities['213'] = '&Otilde;';
            entities['214'] = '&Ouml;';
            entities['215'] = '&times;';
            entities['216'] = '&Oslash;';
            entities['217'] = '&Ugrave;';
            entities['218'] = '&Uacute;';
            entities['219'] = '&Ucirc;';
            entities['220'] = '&Uuml;';
            entities['221'] = '&Yacute;';
            entities['222'] = '&THORN;';
            entities['223'] = '&szlig;';
            entities['224'] = '&agrave;';
            entities['225'] = '&aacute;';
            entities['226'] = '&acirc;';
            entities['227'] = '&atilde;';
            entities['228'] = '&auml;';
            entities['229'] = '&aring;';
            entities['230'] = '&aelig;';
            entities['231'] = '&ccedil;';
            entities['232'] = '&egrave;';
            entities['233'] = '&eacute;';
            entities['234'] = '&ecirc;';
            entities['235'] = '&euml;';
            entities['236'] = '&igrave;';
            entities['237'] = '&iacute;';
            entities['238'] = '&icirc;';
            entities['239'] = '&iuml;';
            entities['240'] = '&eth;';
            entities['241'] = '&ntilde;';
            entities['242'] = '&ograve;';
            entities['243'] = '&oacute;';
            entities['244'] = '&ocirc;';
            entities['245'] = '&otilde;';
            entities['246'] = '&ouml;';
            entities['247'] = '&divide;';
            entities['248'] = '&oslash;';
            entities['249'] = '&ugrave;';
            entities['250'] = '&uacute;';
            entities['251'] = '&ucirc;';
            entities['252'] = '&uuml;';
            entities['253'] = '&yacute;';
            entities['254'] = '&thorn;';
            entities['255'] = '&yuml;';
        }
        else {
            throw Error("Table: " + useTable + ' not supported');
            return false;
        }
    
    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        histogram[symbol] = entities[decimal];
    }
    
    return histogram;
}

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
};

function get_random_color(){
    var letters = '0123456789ABCDEF'.split('');
    var color = '#';
    for (var i = 0; i < 6; i++) {
        color += letters[Math.round(Math.random() * 15)];
    }
    return color;
}


function aggiornaSessione(msg){
    if (msg.session) 
        location.href = 'index.php';
}

function logout(){
    location.href = 'index.php?op=exit';
}

function messaggio(titolo, messaggio){
    $('#content').load('templates/messaggio.html', function(){
        $('#titolo').html(titolo);
        $('#messaggio').html(messaggio);
    });
}

function getElenco(params){
    $.ajax({
        type: 'POST',
        url: params.url,
        data: '&op=getElenco&min=' + params.min + '&max=' + params.max + '&orderby=' + params.orderby + '&where=' + params.where,
        dataType: 'json',
        success: function(msg){
            aggiornaSessione(msg);
            var html = '<div class="elenco" style="">' +
            '<div class="header-elenco">' +
            params.title +
            '</div>';
            if (params.cols.length > 0) {
                html += '<div class="riga">';
                for (var i = 0; i < params.cols.length; i++) {
                    if (params.cols[i].width != '') 
                        html += '<div class="cell-header" style="width:' + params.cols[i].width + '">' + params.cols[i].name + '</div>';
                }
                html += '</div>';
            }
            if (msg.rows) {
                var totalCount = msg.totalCount;
                if (msg.rows.length > 0) {
                    for (var k = 0; k < msg.rows.length; k++) {
                        var id = msg.rows[k].idutente;
                        var bcolor = '';
                        k % 2 == 0 ? bcolor = '#F5F5F5' : bcolor = '#ffffff';
                        html += '<div class="riga">';
                        for (var i = 0; i < params.cols.length; i++) {
                            var campo = params.cols[i].index;
                            params.cols[i].align ? align = params.cols[i].align : align = 'left';
                            if (i < params.cols.length - 1) 
                                html += '<div class="cell" style="width:' + params.cols[i].width + ';background-color:' + bcolor + ';text-align:' + align + '">' + msg.rows[k][campo] + '</div>';
                            else {
                            
                                if (params.icons.length > 0) {
                                    html += '<div class="cell" style="width:' + params.cols[i].width + ';background-color:' + bcolor + ';text-align:' + align + '">';
                                    for (var j = 0; j < params.icons.length; j++) {
                                        switch (params.icons[j].class) {
                                            case 'ico-attiva':
                                                msg.rows[k].attivo || msg.rows[k].aperta ? html += '<div class="ico-attiva" title="' + params.icons[j].tip + '" onClick="' + params.icons[j].action + '(\'' + msg.rows[k][params.icons[j].data] + '\');"></div>' : html += '<div class="ico-disattiva" title="' + params.icons[j + 1].tip + '" onClick="' + params.icons[j + 1].action + '(\'' + msg.rows[k][params.icons[j + 1].data] + '\');"></div>';
                                                ;                                                break;
                                                
                                            case 'ico-disattiva':
                                                break;
                                                
                                            case 'ico-archivia':
                                                msg.rows[k].archivio ? html += '<div class="ico-ripristina" title="' + params.icons[j + 1].tip + '" onClick="' + params.icons[j + 1].action + '(\'' + msg.rows[k][params.icons[j + 1].data] + '\');"></div>' : html += '<div class="ico-archivia" title="' + params.icons[j].tip + '" onClick="' + params.icons[j].action + '(\'' + msg.rows[k][params.icons[j].data] + '\');"></div>';
                                                break;
                                                
                                            case 'ico-ripristina':
                                                break;
                                                
                                            default:
                                                html += '<div class="' + params.icons[j].class + '" title="' + params.icons[j].tip + '" onClick="' + params.icons[j].action + '(\'' + msg.rows[k][params.icons[j].data] + '\');"></div>';
                                                break;
                                        }
                                    }
                                    html += '</div>';
                                }
                            }
                        }
                        html += '</div>';
                    }
                }
            }
            html += '</div>';
            if (params.pager && totalCount > 0) { //attivo il paginatore
                var num_pages = 1;
                var current = 1;
                var avanti = '';
                var indietro = '';
                var fine = '';
                var inizio = '';
                if (totalCount > params.max) {
                    num_pages = Math.floor(totalCount / params.max);
                    if (totalCount > num_pages) 
                        num_pages++;
                    if (params.min > 0) { // devo calcolare in che pagina siamo e impostare i parametri per < <<
                        current = (params.min / params.max) + 1;
                        inizio = '<a href="javascript:;" onClick="goTo(\'' + params.list + '\',0,' + parseInt(params.max) + ');"><<</a>';
                        indietro = '<a href="javascript:;" onClick="goTo(\'' + params.list + '\',' + (parseInt(params.min) - parseInt(params.max)) + ',' + parseInt(params.max) + ');"><</a>';
                    }
                    if (current < num_pages) {
                        fine = '<a href="javascript:;" onClick="goTo(\'' + params.list + '\',' + ((num_pages - 1) * parseInt(params.max)) + ',' + parseInt(params.max) + ');">>></a>';
                        avanti = '<a href="javascript:;" onClick="goTo(\'' + params.list + '\',' + (parseInt(params.min) + parseInt(params.max)) + ',' + parseInt(params.max) + ');">></a>';
                    }
                }
                html += '<div class="pager">';
                html += '<div class="pager-left">' + inizio + ' ' + indietro + '</div>';
                html += '<div class="pager-center">Pag ' + current + ' di ' + num_pages + '</div>';
                html += '<div class="pager-right">' + avanti + ' ' + fine + '</div>';
                html += '</div>';
            }
            // LEGENDA 
            html += '<div id="helper" class="help"></div>';
            // MAPPA
            html += '<div id="canvasMap" class="maps"><div id="cont-maps" class="canvas-map"></div>'+
			'<div id="toolbarMaps" class="toolMaps">'+
			'<input id="btn-aggiorna-mappa" type="button" value="AGGIORNA">&nbsp;<input id="btn-chiudi-mappa" type="button" value="CHIUDI">' +
			'</div>' +
			'</div>';
            $('#content').html(html);
        }
    });
}

function goTo(elenco, min, max){
    $('#' + elenco).attr('max', max).attr('min', min);
    $('#' + elenco).click();
}
